package thread;

/**
 * 静态方法锁
 *如果我们在静态方法上使用synchronized,那么该方法就一定具有同步效果。
 *
 * 静态方法指定的锁对象为当前类的类对象，即：Class的实例。
 * JVM在加载一个类时会实例化一个Class的实例与之对应，这个实例称为一个类的类对象。
 * 在JVM内部每个被加载的类都有切只有一个Class的实例与之对应。静态方法指定的同步监视器
 * 对象也是它。
 * 后面学习java反射机制时会介绍Class
 */
public class SyncDemo3 {
    public static void main(String[] args) {
        Boo boo = new Boo();
       Thread t1 = new Thread("老板"){
           @Override
           public void run() {
               boo.dosome();
           }
       };
       Thread t2 = new Thread("员工"){
           @Override
           public void run() {
               boo.dosome();
           }
       };

       t1.start();
       t2.start();
    }
}
class Boo{
   // public static synchronized void dosome(){
    public static void dosome(){
        synchronized (Boo.class){
            Thread t = Thread.currentThread();
            System.out.println(t.getName()+"正在执行dosome方法...");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(t.getName()+":执行方法完毕！");
        }



    }
}